Shell 脚本进行数学运算
注意:let
和 expr
命令已经过时了,不要再使用,而 $[ operation ]
的方式则已经废弃了,现在数学运算只需简单的使用 $(( 表达式 ))
就行了,双括号命令允许使用高级数学表达式。
如下所示
#!/bin/bash
val=$((2 + 2))
echo "两数之和为 : $val"
执行脚本,输出结果如下所示:
两数之和为 : 4
实例:
#!/bin/bash
a=10
b=20
# 在算数表达式中,变量前面无需加 $
val=$((a + b))
echo "a + b : $val"
val=$((a - b))
echo "a - b : $val"
val=$((a * b))
echo "a * b : $val"
val=$((b / a))
echo "b / a : $val"
val=$((b % a))
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi
执行脚本,输出结果如下所示:
a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a 不等于 b
bc 工具(浮点运行、进制转换)
上面的命令都只能用于整形运行,无法支持浮点型,下面使用 bc 来处理浮点型,bc 是一个用于数学运算的高级实用工具,这个精密的计算器包含了大量的选项。
$ echo "4 * 0.52" | bc
2.08
设定小数精度
$ echo "scale=2;22/7" | bc
3.14
进制转换
用 bc 可以将一种进制系统转换为另一种
#!/bin/bash
no=100
echo "obase=2;${no}" | bc
no=1100100
echo "obase=10;ibase=2;${no}" | bc
输出
1100100
100
上面适用于较短的运算,但如果需要进行大量运算,在一个命令行中列出多个表达式就会有点麻烦。
有一个方法可以解决这个问题。bc 命令能识别输入重定向,所以使用内联输入重定向
#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc << EOF
scale = 4
a1 = ($var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
)
echo The final answer for this mess is $var5
输出:
The final answer for this mess is 2813.9882